﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data.SqlClient;
using AccesoDatos.SVCWCF;
using AccesoDatos.DAO.Base;
using System.Data;
using AccesoDatos.DTO;
using AccesoDatos.DTO.Base;

namespace AccesoDatos.IWCF
{
    // NOTA: Si cambia el nombre de clase "Seg" aquí, también debe actualizar la referencia a "Seg" en Web.config.
    public class Seg : BaseDAO, ISeg
    {
        #region Metodos publicos

        public bool CompruebaDni(string DNIcod)
        {
            string dni = Base64_Decode(DNIcod);

            bool resultado = false;
            string sql = "spu_Seg_CompruebaDNI";
            SqlCommand cmd = new SqlCommand(sql, this.ConexionIntegra);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@DNI", dni.ToUpper());

            int lectura = (int)cmd.ExecuteScalar();
            resultado = lectura > 0 ? true : false;
            
            return resultado;
        }

        /// <summary>
        /// Funcion que define a nivel de usuario el objeto de login
        /// </summary>
        /// <param name="Nick"></param>
        /// <param name="userhash"></param>
        /// <returns></returns>
        public bool Login(string Nick, string userhash)
        {

            bool resultado = false;
            string sql = "spu_Seg_ValidaUsuario";
            SqlCommand cmd = new SqlCommand(sql, this.ConexionIntegra);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@Nick", Nick);
            cmd.Parameters.Add("@UserHash", userhash);
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                if (dr.Read())
                {
                    resultado = true;
                }
                else
                {
                    //No se ha encontrado ningun resultado
                }
                return resultado;
            }

            return resultado;
        }

        /// <summary>
        /// Función que comprueba si existe un usuario con el mismo nick
        /// </summary>
        /// <param name="Nick">Nick que se desea comprobar</param>
        /// <returns>Valor booleano que determina si existe o no</returns>
        public bool CompruebaNick(string Nick)
        {
            bool resultado = false;

            string sql = "spu_Seg_CompruebaNick";
            SqlCommand cmd = new SqlCommand(sql, this.ConexionIntegra);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Nick", Nick.ToUpper());

            int lectura = (int)cmd.ExecuteScalar();
            resultado = lectura > 0 ? true : false;
            //using (SqlDataReader dr = cmd.ExecuteReader()) 
            //{
            //    if (dr.Read().Equals(1))
            //    {
            //        resultado = true;
            //    }
            //    else 
            //    {
            //        //No se ha encontrado ningun resultado
            //    }
            //    return resultado;
            //}

            return resultado;
        }

        #endregion

        #region Metodos privados

        /// <summary>
        /// Funcion que decodifica la cadena en base 64
        /// </summary>
        /// <param name="str">Cadena codificada</param>
        /// <returns>Cadena de texto ya de codificada</returns>
        public static string Base64_Decode(string str)
        {
            try
            {
                byte[] decbuff = Convert.FromBase64String(str);
                return System.Text.Encoding.UTF8.GetString(decbuff);
            }
            catch
            {
                return String.Empty;
            }
        }

        #endregion
    }
}
